"""
    这是接口关键字驱动类,用于提供自动化接口测试的关键字方法
    接口中常用的关键字：
    1.请求方法：get、post、
    2.结婚Allure报告的装饰器，@Allure.step
     Allure报告可直接捕捉你的参数的具体信息，让报告更详细
    3.报告需求进行断言封装：jsonpath、数据断言
    4、加解密的封装
"""
import json

import allure
import jsonpath
import pymysql
import requests


# 工具类/关键字驱动类/基类
class ApiKey():
    @allure.step("发送get请求")
    def get(self,url,params=None,**kwargs):
        # print("======get请求开始======")
        return requests.get(url=url, params=params, **kwargs)

    def post(self,**kwargs):
        # print("======post请求开始======")
        return requests.post(**kwargs)

    # 基于jsonpath获取数据的关键字
    @allure.step("发送post请求")
    def get_text(self,response,key):
        """
        :param response: 响应报文，主流是json格式
        :param key: json的表达式
        :return: key对应的值,json路径
        """
        dict_data = json.loads(response) # json格式报文转成字
        value_list = jsonpath.jsonpath(dict_data,key) # jsonpath获取的是list
        return value_list[0] # 获取第一个值

    # 数据库校验关键字
    @allure.title('数据库校验')
    def sql_check(self,sql):
        # 1.创建数据库连接
        conn = pymysql.Connect(
            user='api_test',
            password="Aa9999!",
            host='shop-xo.hctestedu.com',
            database='shop-xo.hctestedu.com',
            port=3306,
            charset='utf8'
        )
        # 2.创建游标
        cus = conn.cursor()
        # 3.准备执行
        cus.execute(query=sql)
        # 4.查询数据
        result = cus.fetchone()
        # 5.关闭数据库
        conn.close()
        # 6.返回数据
        return result


if __name__ == '__main__':
    ak=ApiKey()
    # 登录接口请求
    data = {
        "accounts": "hu2374145",
        "pwd": "hu2374145",
        "type": "username"
    }
    headers = {
        "content-type": "application/json"
    }
    params = {
        "application": "app",
        "application_client_type": "weixin"
    }

    # 01.登录
    url = "http://shop-xo.hctestedu.com/index.php?s=api/user/login"
    res = ak.post(url=url, headers=headers, json=data, params=params)
    print(res.text)
    result = jsonpath.jsonpath(res.json(),"$..msg")
    print(result)





